package com.xbongbong.paas.model;

import com.xbongbong.paas.domain.entity.PaasProcessDataEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.domain.entity.UpdateDataEntity;

import java.util.List;
import java.util.Map;

/**
 * @author: wufeng
 * @date: 2018/11/19 14:39
 * @desrcption: 流程任务
 */
public interface PaasProcessDataModel {

    /**
     * 插入实体
     *
     * @param entity 实体
     *
     * @return Integer MyBatis操作结果 1：成功
     */
    Integer insert(PaasProcessDataEntity entity);

    /**
     *  查询列表
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity
     * @descption
     * @return java.util.List<ApplicationListVO>
     */
    List<PaasProcessDataEntity> list(Map<String, Object> entity);

    /**
     * 查询单个实体
     * @param key
     * @param corpid
     * @return
     */
    PaasProcessDataEntity getByKey(Integer key, String corpid);
    /**
     *  查询列表数量
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity
     * @descption
     * @return Integer
     */
    Integer getEntitysCount(Map<String, Object> entity);

    /**
     * 根据data里某个条件搜索
     *
     * @param dataParam   data里属性
     * @param param 参数
     */
    Integer getCountByCondition(Map<String, Object> dataParam, Map<String,Object> param);

    /**
     * 删除实体
     * @author wufeng
     * @date 2018/8/6 17:18
     * @param entity 实体
     * @descption
     * @return java.lang.Integer  mybatis操作结果，1：成功
     */
    Integer delete(PaasProcessDataEntity entity);

    /**
     *  更新名字
     * @author wufeng
     * @date 2018/8/13 10:19
     * @param entity
     * @descption
     * @return java.lang.Integer
     */
    Integer update(PaasProcessDataEntity entity);

    /**
     * 批量插入
     * @param list
     * @return
     */
    void insertBatch(List<PaasProcessDataEntity> list);

    /**
     * 查询单个实体
     * @param key
     * @param corpid
     * @return
     */
    PaasProcessDataEntity getByTaskId(Long key, String corpid);

    /**
     * 根据父业务id查询某业务审批中数据
     * @param businessType
     * @param attr
     * @param dataIdIn
     * @param corpid
     */
    List<PaasProcessDataEntity> getInApprovalDataByIdCondition(int businessType, String attr, List<Long> dataIdIn, String corpid, List<Integer> flowStatusIn);

    void deleteByTaskId(Long taskId, String corpid);

    /**
     * 根据条件查询某业务审批中数据
     * 模糊查询
     * @param businessType
     * @param attr
     * @param nameLike
     * @param corpid
     * @return
     */
    List<PaasProcessDataEntity> getInApprovalDataByLikeCondition(int businessType, String attr, String nameLike, String corpid, Long formId);

    /**
     * 根据条件查询某业务审批中数据
     * 模糊查询
     * @param formId
     * @param businessType
     * @param attr
     * @param name
     * @param corpid
     * @return
     */
    List<PaasProcessDataEntity> getInApprovalDataByCondition(Long formId, int businessType, String attr, String name, String corpid);

    /**
     * 根据条件精准查询某业务审批中数据
     * 模糊查询
     * @param businessType
     * @param attr
     * @param value
     * @param corpid
     * @return
     */
    List<PaasProcessDataEntity> getInApprovalData(int businessType, String attr, String value, String corpid);


    List<PaasProcessDataEntity> getInApprovalDataByFormId(int businessType, String attr, String value, String corpid, Long formId);



    /**
     * 批量更新
     * @param list
     * @return
     */
    void updateBatch(List<PaasProcessDataEntity> list, String corpid);

    /**
     * 批量更新
     * @param list 更新的数据list
     * @param corpid 公司id
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    void updateBatchForAll(List<PaasProcessDataEntity> list, String corpid);

    void updateBatchForData(List<UpdateDataEntity> list, String corpid);

    /**
     * 根据idlist获取合同相关联的回款单列表
     * @param businessType
     * @param attr
     * @param dataIdIn
     * @param corpid
     * @param flowStatusIn
     * @return
     */
    List<PaasProcessDataEntity> getInApprovalDataByIdConditionJsonArray(int businessType, String attr, List<Long> dataIdIn, String corpid, List<Integer> flowStatusIn);

    /**
     * 根据idlist获取发票列表
     * @param businessType
     * @param attr
     * @param dataIdIn
     * @param corpid
     * @param flowStatusIn
     */
    List<PaasProcessDataEntity> getInvoiceInApprovalDataByIdConditionJsonArray(int businessType, String attr, List<Long> dataIdIn, String corpid, List<Integer> flowStatusIn);

    /**
     * 仅用于资金管理第一期上线脚本,查询公司所有的审批记录
     * @param corpid
     * @return
     */
    List<PaasProcessDataEntity> getAllData(String corpid,Integer del);

    /**
     * 根据idlist和回款单类型处理
     * @param businessType
     * @param attr
     * @param dataIdIn
     * @param corpid
     * @param flowStatusIn
     * @return
     */
    List<PaasProcessDataEntity> getInApprovalDataByIdAndTypeCondition(int businessType, String attr, List<Long> dataIdIn, String corpid, List<Integer> flowStatusIn);

    /**
    * @Description:
    * @Param: [list]
    * @return: void
    * @Author: cyy
    * @Date: 2019/12/5
    */
    Integer updateInstockAndOutstockType(List<UpdateDataEntity> list) throws XbbException;

    /**
     * 根据表单id删除数据
     * @param formId
     * @param corpid
     * @return
     */
    Integer deleteByFormId(Long formId, String corpid);

    List<PaasProcessDataEntity> hasDataInApproval(Map<String, Object> param);

    /**
     * 获取审批数据表某种业务类型的公司list，减少循环主体
     * @param businessType 业务类型
     * @return java.util.List<java.lang.String>
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    List<String> getCorpidList(Integer businessType);

    /**
     * 查询改资金账户ID下是否存在在审批中的回款单
     * @param corpid 公司ID
     * @param accountId 账户ID
     * @return 总数
     */
    Integer getByFundAccountIdInPaymentSheet(String corpid, Long accountId);

    /**
     * 查询改资金账户ID下是否存在在审批中的付款单
     * @param corpid 公司ID
     * @param accountId 账户ID
     * @return 总数
     */
    Integer getByFundAccountIdInPaySheet(String corpid, Long accountId);

    /**
     * 是否有审批中的标签
     * @param param
     * @return
     */
    Integer hasLabelInApprovel(Map<String, Object> param);

    List<PaasProcessDataEntity> hasDataInApprovalWithData(Map<String, Object> param);

    /**
     * Description: 查字段在审批中的数据量
     * @param param
     * @throws
     * @author 魏荣杰
     * @date 2021/3/5 10:29
     * @since
     * @return
     */
    Long countDataInApproval(Map<String, Object> param);

    /**
     * 检索数据是否有在审批里
     * @param corpid
     * @param saasMark
     * @param businessType
     * @param formId
     * @param attr
     * @param subAttr
     * @param fieldType
     * @param page
     * @param pageSize
     * @return
     */
    boolean hasDataInApproval(String corpid, Integer saasMark, Integer businessType, Long formId, String attr, String subAttr, Integer fieldType, Integer page, Integer pageSize) ;
}
